package com.hr.剑指offer.work1;

import java.util.LinkedList;

/**
 * @author 周恒哲
 * @date 2020/06/
 * 接用LinkedList模拟
 *      push
 *      如果入栈的数值x小于等于当前最小值，那么把当前最小值先压入栈
 *     （如果x出栈，可以找到下一个最小值）然后再压入x
 *      pop
 *     如果出栈的数值等于当前最小值，说明需要找到前一个最小值替换当前最小值，依照pop操作，
 *     可知前一个最小值在栈顶的下一个元素
 **/
public class 面试题30_包含min函数的栈 {

    private LinkedList<Integer> data;
    private int min;
    /** initialize your data structure here. */
    public 面试题30_包含min函数的栈() {
        data=new LinkedList<>();
        min=Integer.MAX_VALUE;
    }

    public void push(int x) {
        if(x<=min){
            data.add(min);
            min=x;
        }
        data.add(x);
    }

    public void pop() {
        if (data.pollLast()==min){
            min=data.pollLast();
        }
    }

    public int top() {
        return data.peekLast();
    }

    public int min() {
        return min;
    }
}
